<?php


require_once($root_path.'modules/rbac/db/dbinterface.php');
//require_once('/var/www/sinapsisvn/modules/rbac/db/dbinterface.php');

require_once("role.php");
require_once("resource.php");

class permission{


	function Insertar_permiso($nombreRecurso, $nombreRol, $permiso, $creador){

		$result=NULL;
                $role = new role();
                $resource = new resource();
                $exist_ro=$role->Seleccionar_rol($nombreRol, $creador);
                $exist_re=$resource->Seleccionar_recurso($nombreRecurso, $creador);

                if($exist_re && $exist_ro){
                    $dbinterface = new dbinterface();//iniciar conexion con la interfaz de base de datos
                    $dbinterface->connect();
                    $result=$dbinterface->insertar("rbac_permission",array('id_role' => $exist_ro[0]['id'], 'id_resource'=>$exist_re[0]['id'], 'status'=>0, 'action'=>$permiso),$creador);


                }
                else{
                    echo ("caso sin permisos o no existen");
                }

		return $result;

	}

	function Seleccionar_permiso($nombreRecurso,$nombreRol,$permiso,$buscador){

		$result=NULL;
                $role = new role();
                $resource = new resource();
                $exist_ro=$role->Seleccionar_rol($nombreRol, $buscador);
                $exist_re=$resource->Seleccionar_recurso($nombreRecurso, $buscador);

                if($exist_re && $exist_ro){
                    $dbinterface = new dbinterface();//iniciar conexion con la interfaz de base de datos
                    $dbinterface->connect();
                    if($nombreRecurso==NULL && $nombreRol==NULL && $permiso==NULL){
                        $result=$dbinterface->seleccionar("rbac_permission",array('id_role' => NULL, 'id_resource'=>NULL, 'action'=>NULL),$buscador);
                    }
                    elseif($nombreRecurso==NULL && $permiso==NULL){
                         $result=$dbinterface->seleccionar("rbac_permission",array('id_role' => $exist_ro[0]['id'], NULL,NULL),$buscador);
		    }
                    elseif($nombreRecurso!=NULL && $nombreRol==NULL && $permiso==NULL){
			
                         $result=$dbinterface->seleccionar("rbac_permission",array('id_role' => NULL, 'id_resource'=>$exist_re[0]['id'],'action'=>NULL),$buscador);
//var_dump($result);
		    }else{
                        $result=$dbinterface->seleccionar("rbac_permission",array('id_role' => $exist_ro[0]['id'], 'id_resource'=>$exist_re[0]['id'], 'action'=>$permiso),$buscador);

}
		        foreach($result as &$perm){
		            $rol=$dbinterface->seleccionar("rbac_role",array('id' => $perm['id_role']),$buscador);
		            $recurso=$dbinterface->seleccionar("rbac_resource",array('id'=>$perm['id_resource']),$buscador);
		            $perm['id_role']=$rol[0]['name'];
		            $perm['id_resource']=$recurso[0]['name'];
		        }
                }
                else{
                    echo ("caso sin permisos o no existen");
                }

		return $result;
}



	function Actualizar_permiso($nombreRol,$nombreRecurso,$permiso,$nuevoNombreRol,$nuevoNombreRecurso, $nuevoPermiso , $nuevoEstado, $modificador){
		$result=NULL;
		$dbinterface = new dbinterface();//iniciar conexion con lam interfaz de base de datos
		$dbinterface->connect();
                $oldpermission= $this->Seleccionar_permiso($nombreRecurso, $nombreRol, $permiso, $modificador);
		///si no tiene permiso
		
                //echo("cosas adentro ".$nombreRecurso." ".$nombreRol." ".$permiso." ".$nuevoNombreRol." ".$nuevoNombreRecurso." ".$nuevoPermiso." ".$nuevoEstado." ".$modificador." ");
                
                if ($oldpermission==FALSE)
			return FALSE;
		else{
			//si no existe
			if ($oldpermission==NULL)
			return NULL;
			else{

                                $role = new role();
                                $resource = new resource();
                                $exist_ro=$role->Seleccionar_rol($nuevoNombreRol, $modificador);
                                $exist_re=$resource->Seleccionar_recurso($nuevoNombreRecurso, $modificador);
                                $old_ro=$role->Seleccionar_rol($nombreRol, $modificador);
                                $old_re=$resource->Seleccionar_recurso($nombreRecurso, $modificador);
                                
                                if ($nuevoNombreRol!=NULL)
                                    $idNuevoRol=$exist_ro[0]['id'];
                                if ($nuevoNombreRecurso!=NULL)
                                    $idNuevoRecurso=$exist_re[0]['id'];
                                
                                $result=$dbinterface->modificar("rbac_permission", array('id_role'=>$old_ro[0]['id'], 'id_resource'=>$old_re[0]['id'], 'action'=>$permiso), array('id_role' => $idNuevoRol, 'status'=>$nuevoEstado, 'id_resource'=>$idNuevoRecurso, 'action'=>$nuevoPermiso), $modificador);
                        }
		}
		return $result;
	}

	function Eliminar_permiso($nombreRol,$nombreRecurso,$permiso,$eliminador){

		//echo ("estos son los recursos y roles que debe buscar ".$nombreRol." ".$nombreRecurso." ".$nombrePermiso."<br>");
                $result=NULL;
		$dbinterface = new dbinterface();//iniciar conexion con lam interfaz de base de datos
		$dbinterface->connect();
                $oldpermission= $this->Seleccionar_permiso($nombreRecurso, $nombreRol, $permiso, $eliminador);
		//echo("<br>");
                //print_r($oldpermission);
                //echo("<br>");
                //si no tiene permiso
		if ($oldpermission==FALSE)
			return FALSE;
		else{
			//si no existe
			if ($oldpermission==NULL)
			return NULL;
			else{
				$role = new role();
                                $resource = new resource();
                                $exist_ro=$role->Seleccionar_rol($nombreRol, $eliminador);
                                $exist_re=$resource->Seleccionar_recurso($nombreRecurso, $eliminador);
                                
                                //echo ("estos son los recursos y roles encontrados ".$exist_ro[0]['name']." ".$exist_re[0]['name']."");
                                //echo ("estos son los recursos y roles del permiso ".$oldpermission[0]['id_role']." ".$oldpermission[0]['id_resource']."");

				$result=$dbinterface->eliminar("rbac_permission", array('id_role'=>$exist_ro[0]['id'], 'id_resource'=>$exist_re[0]['id'], 'action'=>$permiso), $eliminador);
			}
		}

		return $result;
	}



}
?>
